<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // var arr = [1,2,3] ;

        // // 实现深复制：遍历原数组

        // var arr2 = [] ;
        // for(var i in arr) {
        //     arr2.push(arr[i]) ;
        // }



        var arr = [1,[2,3],3] ;

        // 实现深复制：遍历原数组

        var arr2 = [] ;
        for(var i in arr) {
            arr2.push(arr[i]) ;
        } 

        arr[1].push(4) ; 

        console.log(arr2) ;   // [1 , [2,3,4] , 3]



        // 这里要注意在遍历的过程中
        //   1   push到  arr2中
        //  [2,3]  push到  arr2中     [2,3]是一个数组  

        // arr[1]  和 arr2[1]   地址是共享的  


        // 并没有真正的实现深复制

        // 需要把 arr[1]  再次深复制   遍历



        // 判断数组中的值是不是数组
        //    不是数组就直接push
        //    是数组就再次遍历


        // 二维数组的深复制
        function deepCopy(arr) {
            // 搞一个新的数组
            var arr2 = [] ;
            // 遍历原数组
            for(var i in arr) {
                // 判断是不是数组
                if(Array.isArray(arr[i])) {
                    var arr3 = [] ;
                    // 把arri进行深复制  存入数组arr3当中
                    for(var j in arr[i]) {
                        arr3.push(arr[i][j]) ;
                    }
                    arr2.push(arr3) ;
                }
                else {
                    arr2.push(arr[i]) ;
                }
            }
            return arr2 ;
        }


        var arr = [1,2, [3,4] , 5]

        var arr2 = deepCopy(arr) ;

        arr[2].push('a') ;

        console.log(arr);   // [1,2,[3,4,'a'] , 5]

        console.log(arr2);   // [1,2,[3,4] , 5]



        // 多维数组的深复制？   递归






        function deepCopy(arr) {
            var arr2 = [] ;
            // 深复制就是遍历
            for(var i in arr) {
                // 判断值是不是数组
                if(Array.isArray(arr[i])) {
                    // 如果arr[i]是数组   深复制一下存入一个新的数组
                    var arr3 = [] ;
                    for(var j in arr[i]) {
                        arr3.push(arr[i][j]) ;
                    }
                    // arr3 存入arr2中
                    arr2.push(arr3) ;
                }
                else {
                    arr2.push(arr[i]) ;
                }
            }
            return arr2 ;
        }


    </script>
    
</body>
</html>